/**
 * 获取URL地址问号和面的参数信息（可能也包含HASH值）
 * @param {*} url
 * @return
 *  [object] 把所有问号参数信息以键值对的方式存储起来并且返回
 *  [示例]
 *    input："http://www.domain.com/?name=henry&age=18#video"
 *    output：{name:'henry',age:18,HASH:'video'}
 */

// 请实现你的方法
// const queryURLParams = url => {}

// w1 split
// const queryURLParams = url => {
//   let result = {}
//   let [params, hash] = url.split('?')[1].split('#')
//   hash && (result['HASH'] = hash)
//   if (params) {
//     params.split('&').forEach(item => {
//       let [k, v] = item.split('=')
//       result[k] = v
//     })
//   }
//   return result
// }

/**
 * 思路分析：利用字符串切割
 * 1.首先找出所有参数和 hash 值
 * 2.再处理多参数
 */

// w2 RegExp
const queryURLParams = url => {
  let result = {}
  let reg1 = /([^?=&#]+)=([^?=&#]+)/g
  let reg2 = /#([^?=&#]+)/g
  url.replace(reg1, (_, $1, $2) => (result[$1] = $2))
  url.replace(reg2, (_, $1) => (result['HASH'] = $1))
  return result
}

/**
 * 思路分析：利用正则表达式
 * 0.分两次匹配查找
 * 1.先找出所有参数
 * 2.再找 hash 参数
 */

const url = 'http://www.domain.com/?name=henry&age=18#video'

const result = queryURLParams(url)

console.log(result) //=> {HASH: 'video', name: 'henry', age: '18'}
